/* * Copyright 2006-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jrecruiter.dao.jpa; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.persistence.NoResultException; import javax.persistence.Query; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.jrecruiter.common.CollectionUtils; import org.jrecruiter.dao.UserDao; import org.jrecruiter.model.User; import org.springframework.stereotype.Repository; /** * @author Gunnar Hillert */ @Repository("userDao") public final class UserDaoJpa extends GenericDaoJpa< User, Long> implements UserDao { /** * Constructor. * */ private UserDaoJpa() { super(User.class); } /** * Get a user from persistence store. * @param username * @return A single user */ public User getUser(String username) { User user; final Query query = entityManager.createQuery( "select user from User user " + "left join fetch user.userToRoles utr " + "left join fetch utr.role " + "where user.username= :username "); query.setParameter("username", username); query.getResultList(); try { user = (User) query.getSingleResult(); } catch(NoResultException e) { user = null; } return user; } @Override public User getUserByUsernameOrEmail(final String usernameOrEmail) { User user; final Query query = entityManager.createQuery( "select user from User user " + "left join fetch user.userToRoles utr " + "left join fetch utr.role " + "where user.username = :usernameOrEmail or user.email = :usernameOrEmail "); query.setParameter("usernameOrEmail", usernameOrEmail); try { user = (User) query.getSingleResult(); } catch(NoResultException e) { user = null; } return user; } /** * Return all users from persistence store. * @return List of users */ @SuppressWarnings("unchecked") public List < User > getAllUsers() { List < User > users = entityManager.createQuery( "from User user order by user.username ASC").getResultList(); return users; } /** * Delete an array of users from persistence store. * * @param usernameList list of user names. */ @SuppressWarnings("unchecked") public void deleteUser(final String[] usernameList) { Session session = (Session)entityManager.getDelegate(); List<User> list = (List<User>) session.createCriteria(User.class).add( Restrictions.in("username", usernameList)).list(); for (int i = 0; i < list.size(); i++) { User user = (User) list.get(i); this.remove(user.getId()); } } /** * Method for returning list of available job postings. * @param pageSize Max number of results returned * @param pageNumber Which page are you one? * @param fieldSorted Which field shall be sorted * @param sortOrder What is the sort order? * @return List of jobs. */ @SuppressWarnings("unchecked") public List < User > getUsers(final Integer pageSize, final Integer pageNumber, Map<String, String> sortOrders, Map<String, String> userFilters) { List < User > users; if (pageSize == null) { throw new IllegalStateException("pageSize must not be null."); } if (pageNumber == null) { throw new IllegalStateException("pageNumber must not be null."); } if (sortOrders == null) { sortOrders = CollectionUtils.getHashMap(); } if (sortOrders.isEmpty()) { sortOrders.put("lastName", "ASC"); } if (userFilters == null) { userFilters = CollectionUtils.getHashMap(); } Session session = (Session)entityManager.getDelegate(); final Criteria criteria = session.createCriteria(User.class); for (Entry<String, String> entry : sortOrders.entrySet()) { if (entry.getValue().equalsIgnoreCase("DESC")) { criteria.addOrder(Order.desc(entry.getKey())); } else if (entry.getValue().equalsIgnoreCase("ASC")) { criteria.addOrder(Order.asc(entry.getKey())); } else { throw new IllegalStateException("SortOrder " + entry.getValue() + " is not supported."); } } for (Entry<String, String> entry : userFilters.entrySet()) { criteria.add(Restrictions.ilike(entry.getKey(), entry.getValue(), MatchMode.ANYWHERE)); } criteria.setFirstResult((pageNumber - 1) * pageSize); criteria.setMaxResults(pageSize); users = criteria.list(); return users; } /** * Returns the number of totally available jobs in the system. * * @return Total number of jobs * @see org.jrecruiter.dao.JobsDao#getJobsCount() */ public Long getUsersCount() { Long numberOfUsers = null; Session session = (Session)entityManager.getDelegate(); org.hibernate.Query query = session.createQuery("select count(*) from User"); numberOfUsers = (Long) query.uniqueResult(); return numberOfUsers; } /** {@inheritDoc} */ public User getUserByVerificationKey(final String key) { User user; final Query query = entityManager.createQuery( "select user from User user " + "where user.verificationKey = :key "); query.setParameter("key", key); query.getResultList(); try { user = (User) query.getSingleResult(); } catch(NoResultException e) { user = null; } return user; } }